﻿var _this = this;

var checkBoxOptionEnum = {
        SHOW:1,
        HIDE:2,
        HIDEFAST:3,
        CHECKALL:4,
        UNCHECKALL:5,
        CHECKOUT:6
};

$(document).ready(function() {
	_this.table1 = tableSync('tbl1');
	selectAppendMake();
	get_mailServer();
	CheckBox(checkBoxOptionEnum.HIDEFAST);
	$('#add_mailServer').click(add_mailServer);
	$('#remove_mailServer').click(remove_mailServer);
	$('#modify_mailServer').click(modify_mailServer);
	$('#th_input_chkbox').click(th_input_chkbox);
	$('#btn_save').click(btn_save);
});


function readOnly(flag){
	
	if(typeof flag!='boolean'){
		return;
	}
	
	var targetTr = $('#tbl1 > tbody').children().last();
	targetTr.find('#server_type').attr('disabled', flag);
	targetTr.find('#server_address').attr('readonly', flag);
	targetTr.find('#server_port').attr('readonly', flag);
	if(flag){
		targetTr.find('#server_type').addClass('background_gray');
		targetTr.find('#server_address').addClass('background_gray');
		targetTr.find('#server_port').addClass('background_gray');
	}else{
		targetTr.find('#server_type').removeClass('background_gray');
		targetTr.find('#server_address').removeClass('background_gray');
		targetTr.find('#server_port').removeClass('background_gray');
	}
}

function btn_save(){
	var param={};
	var server_type;
	var server_address;
	var server_port;
	var targetTr = $('#tbl1 > tbody').children().last();
	
	server_type=targetTr.find('#server_type').val();
	server_type=transServerType(server_type, 'encoding');
	server_address=targetTr.find('#server_address').val();
	server_port=targetTr.find('#server_port').val();
	
	param={'server_type':server_type , 
			'server_address':server_address,
			'server_port':server_port};
	logs(JSON.stringify(param));
	$.post('mailappend/add_mailServer.json', param, function(dat){
		logs(JSON.stringify(dat));
		location.reload();
	});
};

function transServerType(string, type){
	if(type=='encoding'){
		switch(string){
		case '1' :{
			return "POP3";
			
		}
		case '2' :{
			return "IMAP";	
			}
		case '3' :{
			return "SMTP";
			break;
		}
		default:{
			return string;
		}
		}
	}else if(type=='dencoding'){
		switch(string){
		case 'POP3' :{
			return '1';
			
		}
		case 'IMAP' :{
			return "2";	
			}
		case 'SMTP' :{
			return "3";
			break;
		}
		default:{
			return string;
		}
		}
	}
	return string;
}

function get_mailServer(){
	logs('get_mailServer');
	$.post('mailappend/get_mailServer.json', function(dat){
		logs(JSON.stringify(dat.list));
		$(dat.list).each(function(){
			this.server_type = transServerType(this.server_type, 'dencoding');
		});
		_this.table1.tableAutoSync(dat.list, syncOptionEnum.clearValues);
	});
}

function th_input_chkbox(){
	logs('th_input_chkbox');
	if($('#th_input_chkbox').attr("checked")=='checked'){
		CheckBox(checkBoxOptionEnum.CHECKALL);	
	}else{
		CheckBox(checkBoxOptionEnum.UNCHECKALL);	
	}
}

function CheckBox(option){
	switch(option){
	case checkBoxOptionEnum.SHOW:{
		logs('show');
		try{
			$('#th_chkbox').fadeIn();
			$('#tbl1 tbody tr').each(function() {
				$(this).find('#tr_chkbox').fadeIn();
			});
		}catch(e){
			errLog(e);
		}
		
		break;
	}
	case checkBoxOptionEnum.HIDE:{
		logs('HIDE');
		try{
			$('#th_chkbox').fadeOut();
			$('#tbl1 tbody tr').each(function() {
				$(this).find('#tr_chkbox').fadeOut();
			});	
		}catch(e){
			errLog(e);
		}
			
		break;
	}	
	case checkBoxOptionEnum.HIDEFAST:{
		logs('HIDEFAST');
		try{
			$('#th_chkbox').hide();
			$('#tbl1 tbody tr').each(function() {
				$(this).find('#tr_chkbox').hide();
			});	
		}catch(e){
			errLog(e);
		}
			
		break;
	}	
	case checkBoxOptionEnum.CHECKALL:{
		logs('CHECKALL');
		try{
			
			$('#tbl1 tbody tr').each(function() {
				logs('CHECKALL 111'+($(this).find('#td_input_chkbox').attr("checked")=='checked'));
				if(!($(this).find('#td_input_chkbox').attr("checked")=='checked')){
					$('#tbl1 tbody tr').each(function() {
						logs('CHECKALL 1333');
						$(this).find('#td_input_chkbox').attr('checked', 'checked');
					});
					return 0;	// break;
				};
			});	
		}catch(e){
			errLog(e);
		}
			
		break;
	}	
	case checkBoxOptionEnum.UNCHECKALL:{
		logs('UNCHECKALL ');
		try{
			
			$('#tbl1 tbody tr').each(function() {
				$(this).find('#td_input_chkbox').removeAttr('checked');
			});	
		}catch(e){
			errLog(e);
		}
			
		break;
	}	
	/**
	 * 체크된게 하나라도 있으면 return false;<br/>
	 * 체크된게 없으면 return true;
	 * checkbox가 hide 상태이면 return null;
	 */
	case checkBoxOptionEnum.CHECKOUT:{
		logs('CHECKOUT ');
		try{
			if(getCheckBoxVisibleStatus()) return null;
			var ret = true;
			$('#tbl1 tbody tr').each(function() {
				if(($(this).find('#td_input_chkbox').attr("checked")=='checked')){
					logs("CHECKOUT return false");
					ret = false;
					return true;	// break;
				}
			});	
			logs("CHECKOUT return true");
			return ret;
		}catch(e){
			errLog(e);
		}
			
		break;
	}	
	
	
	default:{
		logs('default ');
		try{
			var attr = $('#th_chkbox').attr('style');

			if(getCheckBoxVisibleStatus()){
				CheckBox(checkBoxOptionEnum.SHOW);
			}else{	// show 상태
				CheckBox(checkBoxOptionEnum.HIDE);
			}
		}catch(e){
			errLog(e);
		}
		break;
	}
	}
}


function add_mailServer(){
	var tr1 = $('<tr></tr>');
	tr1.html($('#tbl1').find('tbody').children().last().html());
	tr1.html('<tr>'+ tr1.html()+'</tr>');
	$('#tbl1').find('tbody').append(tr1.html());
	spyOnKey($('#tbl1').find('tbody').children().last().find('#server_port'), doLengthLimit, 4);
	spyOnKey($('#tbl1').find('tbody').children().last().find('#server_address'), doLengthLimit, 200);
	$('#btn_menus').hide();
	$('#div_save').show();
	readOnly(false);
}

function doLengthLimit(id, param){
	logs('doLengthLimit');
	var limit=param;
	var length = $(id).val().length;
	if(length>limit){
		$(id).val($(id).val().substring(0,limit));
	}
};

function remove_mailServer(){
	try{
		if(getCheckBoxVisibleStatus()){	// 숨겨진 상태면 나타내기
			CheckBox(checkBoxOptionEnum.SHOW);	
			$('#add_mailServer').fadeOut();
		}else{
			if(CheckBox(checkBoxOptionEnum.CHECKOUT)){
				CheckBox(checkBoxOptionEnum.HIDE);
				$('#add_mailServer').fadeIn();
			}else{
				// 삭제 컨펌 버튼
				var message = "삭제 하겠습니까?";
				pezAlert(message, function(){
					removeMailServers();
				}).type(alertType.CONFIRM).show();
			}
		}
		
	}catch(e){
		errLog(e);
	}
}

function removeMailServers(){
	var param={};
	$('#tbl1 tbody tr').each(function(index) {
		logs('aaaa index='+index+", checked="+$(this).find('#td_input_chkbox').attr("checked"));
		if($(this).find('#td_input_chkbox').attr("checked")=='checked'){
			param['list'+index]=$(this).find('#nSeq').text();
		}
	});
	
	logs(JSON.stringify(param));
	$.post('mailappend/remove_mailServer.json', param, function(data) {
		try{
			
			location.reload();
			pezAlert("완료!!");
		}catch(eInner){
			errLog(eInner);
		}
	});
	
}
function modify_mailServer(){
	pezAlert('modify_mailServer');
	
}

function selectAppendMake(){
	var mainParam=[];
	
	var subParam=[];
	subParam['id']='0';
	subParam['value']='0';
	subParam['text']='선택해 주세요';
	
	mainParam[0]=subParam;
	
	subParam=[];
	subParam['id']='1';
	subParam['value']='1';
	subParam['text']='POP3';
	subParam['selected']='selected';
	mainParam[1]=subParam;
	
	subParam=[];
	subParam['id']='2';
	subParam['value']='2';
	subParam['text']='IMAP';
	mainParam[2]=subParam;
	
	subParam=[];
	subParam['id']='3';
	subParam['value']='3';
	subParam['text']='SMTP';
	mainParam[3]=subParam;
	
	selectAppend('server_type', mainParam);
}

function selectAppend(id, param){
	if(typeof id !='string') {
		pezAlert('id는 스트링 객체여야 합니다.');
		return;
	}
	
	if(typeof param !='object') {
		pezAlert('param은 JSON 형태의 object여야 합니다.');
		return;
	}
	$(param).each(function(){
		try{
			var opt=$('<option></option>');
			opt.attr('id',this.id);
			opt.attr('value',this.value);
			opt.text(this.text);
			opt.attr('selected', this.selected);
			$('#'+id).append(opt);	
		}catch(e){
			pezAlert('형식을 확인해 주세요');
		}
	});
	
}

/**
 *	숨어 있으면 return true;<br/>
 *	show 상태이면 return false; 
 * @returns {Boolean}
 */
function getCheckBoxVisibleStatus(){
	var attr = $('#th_chkbox').attr('style');
	
	if(typeof attr !== 'undefined' &&(attr.indexOf("none")>0)){
		return true;
	}else{	// show 상태
		return false;
	}
}


spyOnKey = function (id, func, param){
	logs('spyOnKey');
	$(id).keyup(function(){
		func(id,  param);
	});
	$(id).keydown(function(){
		func(id,  param);
	});
	$(id).keypress(function(){
		func(id,  param);
	});
	$(id).blur(function(){
		func(id,  param);
	});
	$(id).focusout(function(){
		func(id,  param);
	});
	$(id).focusin(function(){
		func(id,  param);
	});
};

function errLog(s){
	logs(s);
}
function logs(s){
	console.log(s);
}